const Cart = require('../models/cart.model');
const Product = require('../models/product.model');

// 获取用户购物车
exports.getCart = async (req, res) => {
  try {
    const userId = req.user._id;
    
    let cart = await Cart.getByUserId(userId);
    
    // 如果购物车不存在，创建一个空购物车
    if (!cart) {
      cart = new Cart({ user: userId, items: [] });
      await cart.save();
    }

    res.json(cart);
  } catch (error) {
    console.error('获取购物车失败:', error);
    res.status(500).json({ message: '获取购物车失败', error: error.message });
  }
};

// 添加商品到购物车
exports.addToCart = async (req, res) => {
  try {
    const userId = req.user._id;
    const { productId, quantity = 1, selectedSpecs = {} } = req.body;

    // 验证输入
    if (!productId) {
      return res.status(400).json({ message: '商品ID不能为空' });
    }

    if (quantity <= 0) {
      return res.status(400).json({ message: '商品数量必须大于0' });
    }

    // 检查商品是否存在
    const product = await Product.findById(productId);
    if (!product) {
      return res.status(404).json({ message: '商品不存在' });
    }

    // 检查库存
    if (product.countInStock < quantity) {
      return res.status(400).json({ 
        message: '库存不足', 
        available: product.countInStock 
      });
    }

    // 获取或创建购物车
    let cart = await Cart.findOne({ user: userId });
    if (!cart) {
      cart = new Cart({ user: userId, items: [] });
    }

    // 添加商品到购物车
    await cart.addItem(productId, quantity, selectedSpecs, product.price);

    // 重新获取购物车（包含商品信息）
    cart = await Cart.getByUserId(userId);

    res.status(201).json({
      message: '商品已添加到购物车',
      cart
    });
  } catch (error) {
    console.error('添加到购物车失败:', error);
    res.status(500).json({ message: '添加到购物车失败', error: error.message });
  }
};

// 更新购物车商品数量
exports.updateCartItem = async (req, res) => {
  try {
    const userId = req.user._id;
    const { itemId } = req.params;
    const { quantity } = req.body;

    // 验证输入
    if (quantity < 0) {
      return res.status(400).json({ message: '商品数量不能为负数' });
    }

    // 获取购物车
    const cart = await Cart.findOne({ user: userId });
    if (!cart) {
      return res.status(404).json({ message: '购物车不存在' });
    }

    // 检查商品项是否存在
    const item = cart.items.id(itemId);
    if (!item) {
      return res.status(404).json({ message: '购物车中没有该商品' });
    }

    // 如果数量大于0，检查库存
    if (quantity > 0) {
      const product = await Product.findById(item.product);
      if (product && product.countInStock < quantity) {
        return res.status(400).json({ 
          message: '库存不足', 
          available: product.countInStock 
        });
      }
    }

    // 更新数量
    await cart.updateItemQuantity(itemId, quantity);

    // 重新获取购物车（包含商品信息）
    const updatedCart = await Cart.getByUserId(userId);

    res.json({
      message: quantity > 0 ? '商品数量已更新' : '商品已从购物车移除',
      cart: updatedCart
    });
  } catch (error) {
    console.error('更新购物车失败:', error);
    res.status(500).json({ message: '更新购物车失败', error: error.message });
  }
};

// 从购物车移除商品
exports.removeFromCart = async (req, res) => {
  try {
    const userId = req.user._id;
    const { itemId } = req.params;

    // 获取购物车
    const cart = await Cart.findOne({ user: userId });
    if (!cart) {
      return res.status(404).json({ message: '购物车不存在' });
    }

    // 检查商品项是否存在
    const item = cart.items.id(itemId);
    if (!item) {
      return res.status(404).json({ message: '购物车中没有该商品' });
    }

    // 移除商品
    await cart.removeItem(itemId);

    // 重新获取购物车（包含商品信息）
    const updatedCart = await Cart.getByUserId(userId);

    res.json({
      message: '商品已从购物车移除',
      cart: updatedCart
    });
  } catch (error) {
    console.error('移除购物车商品失败:', error);
    res.status(500).json({ message: '移除购物车商品失败', error: error.message });
  }
};

// 清空购物车
exports.clearCart = async (req, res) => {
  try {
    const userId = req.user._id;

    // 获取购物车
    const cart = await Cart.findOne({ user: userId });
    if (!cart) {
      return res.status(404).json({ message: '购物车不存在' });
    }

    // 清空购物车
    await cart.clearCart();

    res.json({
      message: '购物车已清空',
      cart: {
        user: userId,
        items: [],
        totalAmount: 0,
        totalItems: 0
      }
    });
  } catch (error) {
    console.error('清空购物车失败:', error);
    res.status(500).json({ message: '清空购物车失败', error: error.message });
  }
};

// 获取购物车商品数量（用于显示徽章）
exports.getCartItemCount = async (req, res) => {
  try {
    const userId = req.user._id;
    
    const cart = await Cart.findOne({ user: userId });
    const itemCount = cart ? cart.totalItems : 0;

    res.json({ itemCount });
  } catch (error) {
    console.error('获取购物车商品数量失败:', error);
    res.status(500).json({ message: '获取购物车商品数量失败', error: error.message });
  }
};
